00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef DEDRIVER_PRIV_HPP
00029 #define DEDRIVER_PRIV_HPP
00030
00031 #include "deDriver.hpp"
00032 #include "deRenderStates.hpp"
00033
00034
00035 class deDriver : public IdeDriver
00036 {
00037 protected:
00038
00039 deDriver();
00040 virtual ~deDriver();
00041 public:
00042 virtual deBoolean Init(HWND WindowHandle) = 0;
00043
00044
00045
00046 virtual deBoolean SetDisplay(deDisplay *Display) = 0;
00047 virtual deBoolean Reset(deDisplay *Display = NULL) = 0;
00048 const deDisplay *GetDisplay() const;
00049 virtual deBoolean GetCurrentDisplay(long Adapter, deDisplay * Display) const = 0;
00050 virtual deBoolean GetDisplayMode(long Adapter, long Mode, deDisplay *Display) const = 0;
00051 virtual const deDriverCaps* GetCaps(long Adapter) const = 0;
00052 deRect UpdateWindowRect();
00053 deRect GetDisplayRect() const;
00054
00055
00056 virtual long GetAdapterCount() const = 0;
00057 virtual long GetModeCount(long Adapter) const = 0;
00058 virtual deBoolean WindowedAllowed(long Adapter) const = 0;
00059 virtual deBoolean ValidFormat(long Adapter, Resource ResourceType, BPP BPPType, ZPP ZPPType, BPP FrontBuffer, long ExtraFlag) const = 0;
00060 long BitDepth(BPP BPPType) const;
00061 long BitDepth(ZPP ZPPType) const;
00062 long StencilDepth(ZPP ZPPType) const;
00063 deBoolean HasStencil(ZPP ZPPType) const;
00064 BPP DownSampleFormat(BPP OriginalFormat) const;
00065
00066
00067 virtual deBoolean AddVertexBuffer(IdeVertexBuffer *Vertex) = 0;
00068 virtual deBoolean RemoveVertexBuffer(IdeVertexBuffer *Vertex) = 0;
00069 virtual deBoolean UpdateVertexBuffer(IdeVertexBuffer *Vertex) = 0;
00070
00071
00072 virtual deBoolean AddShader(IdeShader * Shader) = 0;
00073 virtual deBoolean SetShader(IdeShader * Shader) = 0;
00074 virtual deBoolean RemoveShader(IdeShader * Shader) = 0;
00075
00076
00077 virtual deBoolean BeginFrame() = 0;
00078 virtual deBoolean EndFrame() = 0;
00079
00080
00081 virtual deBoolean ClearFrame(deARGB Color, deBoolean ClearTarget = deTRUE, deBoolean ClearZBuffer = deTRUE, deBoolean ClearStencil = deTRUE) = 0;
00082 virtual deBoolean Render(IdeVertexBuffer *Vertex, long IndexOffset, IdeVertexBuffer *IndexOverride) = 0;
00083
00084
00085 virtual deBoolean SetViewport(long X, long Y, long Width, long Height, deFloat MinZ, deFloat MaxZ) = 0;
00086 virtual deBoolean SetFOVClipping(deFloat FOV, deFloat Aspect, deFloat ClipNear, deFloat ClipFar) = 0;
00087 virtual deBoolean SetOrthoClipping(deFloat Width, deFloat Height, deFloat ClipNear, deFloat ClipFar, deBoolean Invert = deFALSE) = 0;
00088 virtual deBoolean SetFOVClippingSubRect(deFloat FOVY, deFloat Aspect, deFloat ClipNear, deFloat ClipFar, deRect SubRect) = 0;
00089 virtual deBoolean SetFOVClippingSubRectFloat(deFloat FOVY, deFloat Aspect, deFloat ClipNear, deFloat ClipFar, deFloatRect SubRect) = 0;
00090 virtual deBoolean SetOrthoClippingSubRect(deFloat Width, deFloat Height, deFloat ClipNear, deFloat ClipFar, deBoolean Invert, deRect SubRect) = 0;
00091 virtual deBoolean SetOrthoClippingSubRectFloat(deFloat Width, deFloat Height, deFloat ClipNear, deFloat ClipFar, deBoolean Invert, deFloatRect SubRect) = 0;
00092 virtual deBoolean SetScissorRect(deRect ScissorRect) = 0;
00093
00094
00095 virtual deBoolean SetCameraTransform(deTransformInfo *M) = 0;
00096 virtual deBoolean SetCameraTransform(deVertex *Eye, deVertex *At, deVertex *Up) = 0;
00097 virtual deBoolean SetCameraTranslation(deVertex *Translation) = 0;
00098 virtual deBoolean SetCameraRotation(deVertex *Rotation) = 0;
00099 virtual deBoolean ResetCameraIdentity() = 0;
00100
00101
00102 virtual deBoolean SetWorldTransform(deVertex *Eye, deVertex *At, deVertex *Up) = 0;
00103 virtual deBoolean SetWorldTransform(deTransformInfo * Mat) = 0;
00104 virtual deBoolean SetWorldTranslation(deVertex *Translation) = 0;
00105 virtual deBoolean SetWorldRotation(deVertex *Rotation) = 0;
00106 virtual deBoolean ResetWorldIdentity() = 0;
00107
00108
00109 virtual deBoolean AddBitmap(IdeBitmap *Bitmap) = 0;
00110 virtual deBoolean AddBitmapProxy(IdeBitmapProxy *BitmapProxy) = 0;
00111 virtual deBoolean RemoveBitmap(IdeBitmap *Bitmap) = 0;
00112
00113
00114 virtual deBoolean RenderTo(IdeBitmap *Bitmap, long CubeMapFace) = 0;
00115 virtual deBoolean ScreenShot(IdeBitmap * &pBitmap, deBoolean GrabWindow) = 0;
00116 virtual deBoolean GetVideoTexture(IdeBitmap* pBitmap, long CubeMapFace) = 0;
00117
00118
00119 virtual unsigned long GetRenderState(RenderState State) = 0;
00120 virtual deBoolean SetRenderState(const IdeRenderState *State) = 0;
00121 virtual deBoolean SetRenderState(RenderState State, unsigned long Value) = 0;
00122 virtual deBoolean EnableLight(long LightID, deBoolean Enable) = 0;
00123 virtual deBoolean DisableAllLights() = 0;
00124
00125 unsigned long GetQualityFlag(QualityFlag Flag);
00126 deBoolean SetQualityFlag(QualityFlag Flag, unsigned long Value);
00127
00128
00129 virtual IdeDriver::Types GetType() const = 0;
00130 virtual deDriverInfo *GetInfo() const = 0;
00131 long GetCount();
00132
00133
00134 void LogInfo(char *Data, ...);
00135 deDriverStats* GetDriverStats();
00136 void ResetDriverStats();
00137
00138 protected:
00139
00140 void SetDefaultRenderstates();
00141 virtual void InvalidateRenderStates(deBoolean Valid) = 0;
00142
00143 deDisplay m_CurrentDisplay;
00144 HWND m_CurWindowHandle;
00145 long m_UniqueID;
00146 deRect m_ClientRect;
00147 deRect m_SourceRect;
00148 unsigned long m_RenderStates[RENDER_COUNT];
00149 unsigned long m_QualityFlags[QUALITY_FLAG_COUNT];
00150 deDriverStats m_Stats;
00151 struct deViewport
00152 {
00153 long X, Y, Width, Height;
00154 deFloat MinZ, MaxZ;
00155 } m_CurrentViewport;
00156 };
00157
00158 class deDriverLoad : public IdeDriverLoad
00159 {
00160 protected:
00161 deDriverLoad::~deDriverLoad();
00162 public:
00163
00164 deDriverLoad::deDriverLoad(char const *Path);
00165 long Release();
00166
00167
00168 long GetCount();
00169 const deDriverInfo *GetInfo(long DriverNumber);
00170 const deDriverInfo *GetInfo(char *DriverName);
00171 IdeDriver *GetDriver(long DriverNumber);
00172 IdeDriver *GetDriver(char *DriverName);
00173
00174 private:
00175
00176 typedef struct DriverEntry
00177 {
00178 HMODULE DriverHandle;
00179 ISDESTINY3DDRIVER DriverProc;
00180 GETDRIVERINSTANCE DriverInstance;
00181 GETDRIVERINFO DriverInfo;
00182 char * DLLName;
00183 char * DriverName;
00184 DriverEntry * Next;
00185 } DriverEntry;
00186
00187
00188 DriverEntry *GetEntry(long EntryNumber);
00189 DriverEntry *GetEntry(char *DriverName);
00190
00191 DriverEntry * m_DriverList;
00192 long m_DriverCount;
00193
00194 long m_UniqueDriverID;
00195 };
00196
00197
00198 #endif